import Vue from 'vue'
import App from './App.vue'
import router from './router'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
import { refreshToken } from '@/api/user'

Vue.config.productionTip = false
Vue.use(ElementUI)

// 检查token是否有效（未过期）
function isTokenValid() {
  const token = localStorage.getItem('token')
  if (!token) return false
  
  try {
    const payload = JSON.parse(atob(token.split('.')[1]))
    const currentTime = Date.now() / 1000
    
    // 如果token还未过期，返回true
    return payload.exp > currentTime
  } catch (error) {
    console.error('Token解析失败:', error)
    return false
  }
}

// 定时刷新token
async function scheduleTokenRefresh() {
  try {
    // 检查token是否有效
    if (!isTokenValid()) {
      console.log('Token已过期，跳过刷新')
      return
    }
    
    console.log('开始刷新token...')
    const response = await refreshToken()
    
    if (response.success && response.data && response.data.token) {
      localStorage.setItem('token', response.data.token)
      console.log('Token刷新成功')
    } else {
      console.error('Token刷新失败：响应格式错误')
    }
  } catch (error) {
    console.error('Token刷新失败:', error)
    
    // 如果刷新失败且是401错误，说明token已失效
    if (error.response && error.response.status === 401) {
      console.log('Token已失效，清除本地存储')
      localStorage.removeItem('token')
      // 可以选择跳转到登录页
      // router.push('/login')
    }
  }
}

// 启动定时器：每5分钟执行一次
let refreshTimer = null

function startTokenRefreshTimer() {
  // 清除之前的定时器
  if (refreshTimer) {
    clearInterval(refreshTimer)
  }
  
  // 设置新的定时器：5分钟 = 5 * 60 * 1000 毫秒
  refreshTimer = setInterval(() => {
    scheduleTokenRefresh()
  }, 5 * 60 * 1000)
  
  console.log('Token定时刷新已启动，每5分钟执行一次')
}

// 停止定时器
function stopTokenRefreshTimer() {
  if (refreshTimer) {
    clearInterval(refreshTimer)
    refreshTimer = null
    console.log('Token定时刷新已停止')
  }
}

// 应用启动时检查并启动定时器
if (localStorage.getItem('token')) {
  startTokenRefreshTimer()
}

// 监听登录状态变化
const originalSetItem = localStorage.setItem
localStorage.setItem = function(key, value) {
  originalSetItem.apply(this, arguments)
  
  // 当设置token时启动定时器
  if (key === 'token' && value) {
    startTokenRefreshTimer()
  }
}

const originalRemoveItem = localStorage.removeItem
localStorage.removeItem = function(key) {
  originalRemoveItem.apply(this, arguments)
  
  // 当移除token时停止定时器
  if (key === 'token') {
    stopTokenRefreshTimer()
  }
}

// 创建Vue实例
new Vue({
  router,
  render: h => h(App)
}).$mount('#app')

// 页面卸载时清理定时器
window.addEventListener('beforeunload', () => {
  stopTokenRefreshTimer()
})
